<?php
/**
 * Functionality: 令牌验证插件
 * Author: 柴炜
 * Date: 2017-3-27 08:35:46
 */
class TokenPlugin extends Yaf_Plugin_Abstract {
    /**
    * 权限验证
    * 如果当前模块并没有绑定当前二级域名的话
    */
    public function checkAuth($isAdmin = false){
        //是否是通用token
        $isCommon = false;
        //获取到POST过来的TOKEN信息
        $c_auth = filterStr($_POST['token']);
        //token数据模型
        $tokenModel = Helper::load('Token');
        
        if($c_auth){
            //token中的 + 号会被转译成空格
            $c_auth = str_replace(' ', '+', $c_auth);
            if($c_auth == '5fe03EXmyh0CmOo5FTNn/uCVNQa5Rb++Aim39nZVZFrO0MXFElC3mdW0y3pRMCiLBlH4t3MtM3Fmz22jhNmS2F/4u7pDr0kus60D7FoiNykR3dA'){//前端通用token
                $isCommon = true;
                $auth = ['10470c3b4b1fed12c3baac014be15fac67c6e815', 24, ''];
            }
            elseif($c_auth == '78e7RUgDdzgb1pUjbdY/5GDqg1aIik0UHEDL4VY90iQSwV/xh7gPGhqIQcYBjAnHSRzYe0J7LaeQD/4asj6xgBQ+KWBWDWZiOtxCtopr8yKkvXI'){//后端通用token
                $isCommon = true;
                $auth = ['10470c3b4b1fed12c3baac014be15fac67c6e815', 88, ''];
            }
            else{//其他token需要进入token验证
                $auth = daddslashes(explode("\t", authcode($c_auth, 'DECODE')));
                $uid = isset($auth[1]) ? $auth[1] : 0;
                if($uid){//说明本token对应的不是第三方的观察者
                    //此处验证token是否有效
                    $isOk = $tokenModel->checkToken($c_auth);
                    if(!$isOk){//如果token验证没有通过
                        $noauth = [
                            'code' => '10000',
                            'msg'  => '无效授权',
                            'data' => []
                        ];
                       echo json_encode($noauth);die;
                    }
                    else{//此处说明token有效，经行更新token的最后修改时间
                        //需要判断一下本次请求是否存在标记状态不允许更新token
                        $noauth = filterStr($_POST['noauth']);
                        if(!$noauth){//说明没传过来,可以更新token
                            $tokenModel->updateToken($c_auth);
                        }
                    }
                }
            }
        }
        else{//走到这里说明没有传递token，后台没有token不允许访问
            if($isAdmin){
                $noauth = [
                    'code' => '10000',
                    'msg'  => '无效授权',
                    'data' => []
                ];
                echo json_encode($noauth);die();
            }
        }
        
        list($core_pw, $core_user_id, $randTime) = empty($auth) || count($auth) < 3 ? ['', '', ''] : $auth;
        
        define('G_USER_ID', !empty($core_user_id) ? $core_user_id : 0);
    }
    
    /**
    * 第三方权限验证
    * 1.token必传 2.token解析出来必须符合第三方
    */
    public function checkOtherAuth(){
        //获取到POST过来的TOKEN信息
        $c_auth = filterStr($_POST['token']);
        
        $isOk = false;
        
        if($c_auth){
            //token中的 + 号会被转译成空格
            $c_auth = str_replace(' ', '+', $c_auth);

            $auth = daddslashes(explode("\t", authcode($c_auth, 'DECODE')));
            $uid = isset($auth[1]) ? $auth[1] : 0;
            
            $thirdModel = Helper::load('Third');
            $thirdKeyArr = $thirdModel::$thirdKeyArr;
            
            if(isset($thirdKeyArr[$uid])){
                define('G_USER_ID', $uid);
                $isOk = true;
            }
        }
        
        if(!$isOk){
            $noauth = [
                'code' => '10000',
                'msg'  => '无效授权',
                'data' => []
            ];
            echo json_encode($noauth);
            die();
        }
    }
    
}